iT邦幫忙

DAY 7
2

Ruby女孩:10萬.times { puts "為什麼?" }系列 第 7

Ruby女孩(7):原來字串也可以比大小?

  • 分享至 

  • xImage
  •  

延續昨天字串雞屁股(昨天的留言XD)的內容,昨天主要說明單引號與雙引號的字串,今天會說明加上倒引號的字串意義,以及字串的**運算**與存取字符方式

※加上倒引號的字串

'字串' 、 "字串" 、 字串

今天要來講第三種,在字串前後加上倒引號 ` (通常在鍵盤的ESC下方那個按鍵),是用於命令的執行,節錄書中一段(p.55):

『當文字被倒引號( )括住時,該文字會被視為一個夾上雙引號( " )的字串實字。該實字會被傳遞給一個名為<span style="color:rgb(255, 255, 255)"><span style="background-color:rgb(0, 0, 0)"> Kernel. 的方法。此方法會將該文字當成作業系統的一個shell命令來執行,並且將命令的輸出當成一個字串傳回。』

例如:我們在終端機中,如欲看資料夾下的檔案,在Unix系統我們會打『 ls 』,在Windows系統我們會打『 dir 』。這些效果等同於用Ruby寫『 ls 』或『 dir 』,請看下圖:

請看三個紅色框框的部分,原本終端機上我直接打ls,可以列出資料夾下的檔案,而當我進入irb(interactive Ruby[註1])模式時,我打ls,執行結果一樣將該目錄底下的資料夾列出來,並且是以字串的模式顯示。另外,如同單引號與雙引號有相對應的『%q』與『%Q』(詳情請看昨天的文章),倒引號也有相對應的『%x』可使用,效果完全相同。

[註1] irb(interactive Ruby)是一種Ruby shell,有安裝Ruby就可以直接在自己終端機進入irb模式,並鍵入任何Ruby的運算式。

※字串的運算

  1. 先來認識兩個字串的運算符:『 + 』、『 << 』,直接看例子比較好懂:

    "國父" + " " + "孫中山先生"

    執行結果=> "國父 孫中山先生"

    "國父" << " " << "孫中山先生"

    執行結果=> "國父 孫中山先生"

看起來兩個運算符的結果一模一樣,都是把字串接在一起了,但有一個很大的差異是:

『 + 』在接完字串之後,會回傳一個新的字串物件!

『 << 』是直接更改最左邊的字串,而不會回傳一個新的物件!

  1. 接著再看**『 * 』**運算符:

    "我愛Ruby" * 3

    執行結果=> "我愛Ruby我愛Ruby我愛Ruby"

    3 * "我愛Ruby"

    TypeError: String can't be coerced into Fixnum

可以知道字串可以乘三遍,但顛倒過來就會報錯!

  1. 字串的比大小

數字可以比大小:

3>2
=> true

-3>-2
=> false

字串也可以比大小!

"R">"U"
=> false

"B">"Y"
=> false

"Ruby">"RUBY"
=> true

這怎麼回事XD?書中提到這其實是跟ASCII編碼有關,所有大寫字母的編碼都比小寫字母小,在前面的連結中,我們可以看到,R的編碼為52,U的編碼為55,所以"R">"U"是錯的,依此類推。

※存取字符與子字符

『String所支援的運算符中最重要的或許是方括號陣列索引運算符 [] ,此運算符可用於提取或修改字串中的特定部分。』

a = "我愛Ruby!"
a[0] #=> "我" 第一個字
a[1] #=> "愛"
a[2] #=> "R"
a[-1] #=> "!" 倒數第一個字
a[-2] #=> "y"
a[-7] #=> "我"
a[-8] #=> nil 找不到這個字

a[2,4] #=> "Ruby" 第2+1個字,往右數總共要4個字
a[2,4] = "Python" #取代為Python XD
a => "我愛Python!"

所有字串開頭都是第0個數,往右正著數,往左負著數,如果超出範圍字串長度就會找不到這個字,取代的方法可以參考上面程式碼最後三行。

=================================================

今天是Lucky 7 day!今天發現這句很發人深省!

“We cannot teach people anything. We can only help them discover it within themselves.” Galileo Galilei

我的鐵人賽的文章可能完全不能當作教學文章,但希望可以給有興趣碰Ruby的朋友一點方向,快加入Ruby的行列吧XD!


上一篇
Ruby女孩(6):Ruby的"-字-字-字-字-字-"
下一篇
Ruby女孩(8):字串迭代小練習!
系列文
Ruby女孩:10萬.times { puts "為什麼?" }30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
altispec
iT邦新手 4 級 ‧ 2014-10-08 00:10:37

吼!抓到了!!你喜歡Python!

0
otiann
iT邦新手 2 級 ‧ 2014-10-08 00:20:21

XDDDDDDDD

我要留言

立即登入留言